package org.swimv2.interfaces;

import java.util.Collection;

import javax.ejb.Remote;

import org.swimv2.entities.*;

@Remote
public interface SkillManagerRemote {
	
	/**
	 * 
	 * @return lista di tutte le Skill che gli utenti possono utilizzare
	 * 
	 * */
	public Collection<Skill> listAllActiveSkills();
	
	/**
	 * 
	 * @return lista di tutte le Skill che devono essere accettate dall'Amministratore
	 * 
	 * */
	public Collection<Skill> listAllSkillReq();
	
	/**
	 * 
	 * @return lista delle Skill possedute dall'utente fornito come parametro
	 * 
	 * */
	public Collection<Skill> listUserSkills(User us);
	
	/**
	 * 
	 * Aggiunge la Skill fornita come parametro nel DB e imposta il valore ACTIVE=false
	 * @return la Skill aggiunta
	 * 
	 * */
	public Skill addSkillReq(Skill skill);
	
	/**
	 * 
	 * Attiva la Skill fornita come parametro
	 * @return la Skill attivata
	 * 
	 * */
	public Skill activateSkill(Skill skill);
	
	/**
	 * Elimina dal DB la Skill fornita come parametro
	 * 
	 * */
	public boolean removeSkill(Skill skill);
	
	/**
	 * 
	 * @return la Skill associata all'ID fornito come parametro
	 * 
	 * */
	Skill getSkill(int id);

	/**
	 * 
	 * Aggiunge una nuova Skill al DataBase, restituendola.
	 * @param il nome della nuova skill
	 *  
	 */
	Skill addSkill(String name);

	/**
	 * 
	 * Aggiunge una nuova Skill al DataBase, restituendola.
	 *  
	 */
	Skill addSkill(Skill skill);
	
	/**
	 * 
	 * Aggiunge una nuova Skill nella lista dell'utente fornito 
	 * come parametro
	 * @return true se il database viene aggiornato, false altrimenti
	 * 
	 * */
	boolean addSkillUser(User user, Skill skill);
	
	/**
	 * 
	 * Elimina la Skill fornita come primo parmetro nella lista 
	 * dell'utente fornito come secondo parametro 
	 * @return true se il database viene aggiornato, false altrimenti
	 * 
	 * */
	boolean removeSkillUser(User user, Skill skill);

	
}
